# Eventlet is a concurrent networking library for Python that allows you to change how you run your code, not how you write it.
# 这段摘自官方文档介绍，Evenlet是一个Python的基于携程的网络库，它改变了你代码运行的方式，但是没有改变你怎么写代码
# eventlet 一个是处理和网络相关的，另一个可以通过协程实现并发
# 随eventlet一起部署的Socket.IO服务器可以访问长轮询和WebSocket传输。
import eventlet

# Eventlet提供的monkey_patch()功能可以用等效的异步版本替换标准库中的所有阻塞功能。尽管python-socketio不需要猴子补丁，但其他类库（例如数据库驱动程序）也可能需要它
eventlet.monkey_patch()

import socketio

# 实例化服务器
# cors_allowed_origins 跨域请求
# logger,engineio_logger 日志输出方便查看
sio = socketio.Server(logger=True, engineio_logger=True, cors_allowed_origins='*')

# 方式3：用一个WSGI应用程序封装：创建好app对象后，使用uWSGI、或gunicorn服务器运行此对象。创建好app对象后，使用uWSGI、或gunicorn服务器运行此对象。
app = socketio.Middleware(sio)


@sio.event(namespace='/juran')
def connect(sid, environ):
    print('connect ', sid)
    # sio.emit('message', {'data': 'foobar'}, namespace='/juran')
    sio.emit('message', {'data': 'foobar'}, function={
        print('**********')
    }, namespace='/juran')


if __name__ == '__main__':
    SERVER_ADDRESS = ('127.0.0.1', 8000)
    sock = eventlet.listen(SERVER_ADDRESS)
    eventlet.wsgi.server(sock, app)
